package app.android.kdictionary.Activity;

import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.LinearLayout;
import app.android.kdictionary.R;
import app.android.kdictionary.Component.MainWebView;
import app.android.kdictionary.R.id;
import app.android.kdictionary.Util.HttpParser;
import app.android.kdictionary.Util.HttpRequester;
import app.android.kdictionary.Util.HttpURLMgr;
import app.android.kdictionary.aidl.WebViewContent;

public class ResultActivity extends DefaultActivity {
	private WebView webView;
	private LinearLayout linearLayout;
	private SharedPreferences sharedPreferences;
	
	private BackGroundThread backGroundThread;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.result);
        
        findView();
        init();
    }
    
	private void findView() {
		linearLayout = (LinearLayout)findViewById(id.result_main);
	}
	
	private void init() {
        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
		
        backGroundThread = new BackGroundThread();
        backGroundThread.execute();
    }
    
    
    // AsyncTask클래스는 항상 Subclassing 해서 사용 해야 함.
    // 사용 자료형은
    // background 작업에 사용할 data의 자료형: String 형
    // background 작업 진행 표시를 위해 사용할 인자: Integer형
    // background 작업의 결과를 표현할 자료형: Long
	private class BackGroundThread extends AsyncTask<String, Integer, Integer> {
		private WebViewContent content;
		
    	// 이곳에 포함된 code는 AsyncTask가 execute 되자 마자 UI 스레드에서 실행됨.
    	// 작업 시작을 UI에 표현하거나
    	// background 작업을 위한 ProgressBar를 보여 주는 등의 코드를 작성.
		@Override
		protected void onPreExecute() {
        	super.onPreExecute();
		}

		// UI 스레드에서 AsynchTask객체.execute(...) 명령으로 실행되는 callback 
		@Override
    	protected Integer doInBackground(String... strData) {
	        int idx = sharedPreferences.getInt("idx",0);
	        
			HttpURLMgr hum = new HttpURLMgr();
			HttpRequester hr = new HttpRequester();
			HttpParser hp = new HttpParser();
			content = new WebViewContent();
			try {
				hp.parseContent(hr.request(hum.getViewURL(""+idx), "GET"), content);
			} catch (Exception e) {
				e.printStackTrace();
			}
			
    		return 1;
    	}
    	
    	// onInBackground(...)에서 publishProgress(...)를 사용하면
    	// 자동 호출되는 callback으로 이곳에서 ProgressBar를 증가 시키고, 
		// text 정보를 update하는 등의 background 작업 진행 상황을 UI에 표현함.
    	@Override
    	protected void onProgressUpdate(Integer... progress) {
    	}
    	
    	// onInBackground(...)가 완료되면 자동으로 실행되는 callback
    	@Override
    	protected void onPostExecute(Integer result) {
    		// remove
        	linearLayout.removeAllViewsInLayout();
        	
        	// mainResult create & add
    		MainWebView mainWebView = new MainWebView(getBaseContext());
    		LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT, 0.0F);
    		linearLayout.addView(mainWebView, lp);
    		
    		webView = (WebView)findViewById(id.result_webview);
    		webView.getSettings().setJavaScriptEnabled(true);
    	    webView.setBackgroundColor(0);
    	    webView.setVerticalScrollBarEnabled(false);
    	    webView.setKeepScreenOn(true);
    	    
    	    webView.setDrawingCacheBackgroundColor(0);
    	    webView.setDrawingCacheEnabled(true);
		    webView.loadData(content.getWebViewString(), "text/html", "utf-8");
    	}
    	
    	// AsyncTask.cancel(boolean) 메소드가 true 인자로 
    	// 실행되면 호출되는 콜백.
    	// background 작업이 취소될때 꼭 해야될 작업은  여기에 구현.
    	@Override
		protected void onCancelled() {
			super.onCancelled();
		}  
	}
}
